# -*- coding: utf-8 -*-
# Author: xiantingDeng
# File: 01_正则表达式.py
# Time: 10:57

# compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象，该对象拥有一系列方法用于正则表达式匹配和替换

# 1、例子
'''
import re
str = "Tish year is 2018"
pat = re.compile("[0-9]{4}")
print(pat.findall(str))
'''


# 2、re模块也提供了与这些方法功能完全一致的函数，这些函数使用一个模式字符串作为他们的第一个参数
'''
import re
str = "This year is 2013"
res = re.findall("[0-9]{4}",str)
print(res)
'''

# 3、表达式中常用函数

# compile()
# 编译正则表达式模式，返回一个正则对象的模式。（可以把那些常用的正则表达式编译成正则表达式对象，这样可以提高一点效率。）
# 格式：re.compile(pattern[,flags=0])
#   pattern: 编译时用的表达式字符串
#   flags: 编译标志位，用于修改正则表达式的匹配方式，如：re.I(不区分大小写)、re.S等
'''
import re
tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re.compile(r'\w+oo\w+')
print(rr.findall(tt))   #查找所有包含'oo'的单词
'''

# match()
# 决定RE是否在字符串刚开始的位置匹配。
# //注：这个方法并不是完全匹配。当pattern结束时若string还有剩余字符，仍然视为成功。
# 格式：re.match(pattern, string[, flags=0])
import re
'''
print(re.match("com","comwww.csdn").group())
print(re.match("com","Comwww,csdn",re.I).span())
'''

# search()
# 格式re.search(pattern,string[,flags=0])
# re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回，如果字符串没有匹配，则返回None。
# print(re.search('\dcom\w','www.4comcsdn.5com').group())
    # 注：match和search一旦匹配成功，就是一个match object对象，而match object对象有以下方法：
    # group() 返回被 RE 匹配的字符串
    # start() 返回匹配开始的位置
    # end() 返回匹配结束的位置
    # span() 返回一个元组包含匹配 (开始,结束) 的位置
'''
a = "123abc456"
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group()) #123abc456,返回整体
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))   #123
'''

# findall()
# re.findall遍历匹配，可以获取字符串中所有匹配的字符串，返回一个列表
# 格式：re.findall(pattern,string[,flags=0])
'''
p = re.compile(r"\s+")
print(p.findall("o1n2m3k4"))

tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re.compile(r'\w*oo\w*')
print(rr.findall(tt))
print(re.findall(r'(\w)*oo(\w)',tt))#()表示子表达式 
'''

# finditer()
# 搜索string，返回一个顺序访问每一个匹配结果（Match对象）的迭代器。
# 找到 RE 匹配的所有子串，并把它们作为一个迭代器返回。
# 格式：re.finditer(pattern, string[, flags=0])
'''
iter = re.finditer(r'\d+','12 drumm44ers drumming, 11 ... 10 ...')
for i in iter:
    print(i)
    print(i.group())
    print(i.span())
'''

# split()
# 按照能够匹配的子串将string分割后返回列表。
# 可以使用re.split来分割字符串，如：re.split(r'\s+', text)；将字符串按空格分割成一个单词列表。
# 格式：re.split(pattern, string[, maxsplit])
# maxsplit: 用于指定最大分割次数，不指定将全部分割。

# print(re.split('\d+','one1two2three3four4five5'))

# sub()
# 使用re替换string中每一个匹配的子串后返回替换后的字符串。
# 格式：re.sub(pattern, repl, string, count)

# text = "JGood is a handsome boy, he is cool, clever, and so on..."
# print(re.sub(r'[a-z]+', '-', text))

# subn()
# 返回替换次数
# 格式：subn(pattern, repl, string, count=0, flags=0)
# print(re.subn('[1-2]','A','123456abcdef'))
# print(re.sub("g.t","have",'I get A,  I got B ,I gut C'))
# print(re.subn("g.t","have",'I get A,  I got B ,I gut C'))

# a=re.search('[\d]',"abc33").group()
# print(a)
# p=re.match('[\d]',"abc33")
# print(p)
# b=re.findall('[\d]',"abc33")
# print(b)

# text = """
# <a href="https://legoclick.58.com/cpaclick?target=szqBpB3draOWUvYfXMK1pAR8uvPCmy3fPjEvnHnOnj01rjEYPH63sMPCIAd_TyEVPW-WP19kPhNVrAuhuBYYuH0vsHbdnvmVmhmLnjcYPWF-rHD3THD3rjNOrjmLPH03nHD3TEDYPjmQn1bkP1n3PjEdrTDQP1nvnjTKnHnkTHbznWEKnEDQPWDdrH0YrHn1PHNOTHDKNDnVOmBgl2AClpAdOGa0OeiBsXithrhTBEDQTHDKXMKxIvVxuWD1PdqOX7qWmyQGmMF6IA-fUMkQsZGCmyqkpyOxnWTQP1TOnWKxuhR6IZRzuRq_UvIxmh71ugkQsAPv0MKzuywGmLwxXMKxmh71ugkQsZ-3gL7GU-q_mg--0hRbxjD_Xh66ULKGU-qOULR3Iy78gLP-mgFWp7qWULFzuyQ6IA-fU-qhpgF1IZkQTiYQTEDQn1EkrHmvnjcYrHnLnWcznHEYTHTKTHDKrHEQPjbkrjbVPWbvnBYYnjndsy7-mHNVnjT1nvn3mHnvPvRhTHD1P1DLPjN1P1TknHT1njTYnHmKnHnLnH0YPHnvrHb1njmkrjmYnTDKTEDksWcLnjn1nHczPW9YrjbvPW0LTE7kXgwCUv3KTEDKm1NfUhuZENGHHg6CuAC3Ub7LIb6Ku1YqTHD3nz3QPz3QnWm8nHnYTHTKnTDKPH0YsjnQnWbKXLYKnHTkPWnKnHTknW0kn9DLmhNkPAwBuaYzPAEOsHEQm1NVrAwBPadWPA7WnWFbPHcLmvmKTHTKTEDkTEDkTyOdUAkKmWw6uW9vmHDvP1ELuhRWrE&amp;adact=3&amp;psid=199482595211809066443316777&amp;entinfo=44613907384458_q&amp;ytdzwdetaildj=0&amp;tjfrom=pc_list_left_yx__199482595211809066443316777__270974407428341760__yx__9,1__0__nH93PHb3PW0dP19QnH9KnTDQP1nvnjTKnHnkTHD1PjTOPWmknWEOn10znWcQPjEKnHnLnH0YPHnLnjTQnjnknjEQP9DYPjmQn1bkP1n3PjEdrTDkTEDKPH0YsjnQnWbKUMR_UTDQnjTvnkDQnjTzP1TzTRKjsXyc-SB6Jrh6VXpEMrXYCBLbfFWG9cbKPvF-njwbmhEVnWwbriYYnyndsH6bmWEVm1w6m1czujNzPvPhTHbznWEKnEDVnEDVTiYKnAE1ujTOnAnzPhF-Pyubnk____eyJyIjp7InNwbSI6IiIsImluZm9pZCI6IjQ0NjEzOTA3Mzg0NDU4Iiwic2xvdCI6InBjX2xpc3RfbGVmdF95eCIsInR5cGUiOiIxNTAiLCJzaWQiOiIxOTk0ODI1OTUyMTE4MDkwNjY0NDMzMTY3NzciLCJ1dG0iOiIiLCJjaWQiOiIifSwidCI6MSwidiI6MX0%3D" urlparams="psid=199482595211809066443316777&amp;entinfo=44613907384458_q" target="_blank" tongji_label="listclick" rel="nofollow" _t="jingzhun" tracelogext="{&quot;scate&quot;:&quot;9224,38675,10646&quot;,&quot;infotype&quot;:&quot;9,1&quot;,&quot;b&quot;:18859867578118,&quot;infolocal&quot;:&quot;1,1150,5152&quot;,&quot;c&quot;:&quot;A507542E471A074549460CF007328E0A&quot;,&quot;sloc&quot;:&quot;1,1150,5152&quot;,&quot;infocate&quot;:&quot;574,3129,2552&quot;}">   南口   | 生产物控计划专员吃电联  </a>
# """
#
#
# res = re.findall('<a href="(.*?)}">(.*?)</a>',text)
#
# # for i in res:
# #     print(i[1])
# print(res[0][1])
